# {{ ansible_managed }}
# 备份系统日志轮转配置文件
# 用于管理备份系统各种日志文件的轮转、压缩和清理
# 
# 配置说明：
# - daily/weekly: 轮转频率（每日/每周）
# - rotate N: 保留N个轮转文件
# - compress: 压缩旧日志文件
# - delaycompress: 延迟压缩（下次轮转时压缩）
# - missingok: 日志文件不存在时不报错
# - notifempty: 空文件不轮转
# - create: 创建新日志文件的权限和所有者
# - postrotate: 轮转后执行的脚本

# 主备份日志 - 记录备份系统的主要操作和状态
{{ backup_log_dir }}/backup.log {
    daily                                                    # 每日轮转
    rotate {{ backup_log_retention_days | default(30) }}    # 保留30天的日志文件
    compress                                                 # 压缩旧日志文件
    delaycompress                                            # 延迟压缩（下次轮转时压缩）
    missingok                                                # 日志文件不存在时不报错
    notifempty                                               # 空文件不轮转
    create 0640 {{ backup_user | default('root') }} {{ backup_group | default('root') }}  # 创建新文件权限和所有者
    postrotate
        # 轮转后向rsyslog发送HUP信号以重新加载配置
        if [ -f /var/run/rsyslogd.pid ]; then
            /bin/kill -HUP $(cat /var/run/rsyslogd.pid) 2>/dev/null || true
        fi
    endscript
}

# 备份监控日志 - 记录备份系统监控和健康检查信息
{{ backup_log_dir }}/backup_monitor.log {
    daily                                                    # 每日轮转
    rotate {{ backup_log_retention_days | default(30) }}    # 保留30天的日志文件
    compress                                                 # 压缩旧日志文件
    delaycompress                                            # 延迟压缩
    missingok                                                # 日志文件不存在时不报错
    notifempty                                               # 空文件不轮转
    create 0640 {{ backup_user | default('root') }} {{ backup_group | default('root') }}  # 创建新文件权限和所有者
}

# 数据库备份日志 - 记录数据库备份操作的详细信息
{{ backup_log_dir }}/database_backup.log {
    daily                                                    # 每日轮转
    rotate {{ backup_log_retention_days | default(30) }}    # 保留30天的日志文件
    compress                                                 # 压缩旧日志文件
    delaycompress                                            # 延迟压缩
    missingok                                                # 日志文件不存在时不报错
    notifempty                                               # 空文件不轮转
    create 0640 {{ backup_user | default('root') }} {{ backup_group | default('root') }}  # 创建新文件权限和所有者
}

# 恢复操作日志 - 记录数据恢复和还原操作的详细信息
{{ backup_log_dir }}/restore.log {
    weekly                                                   # 每周轮转
    rotate {{ backup_log_retention_weeks | default(12) }}   # 保留12周的日志文件
    compress                                                 # 压缩旧日志文件
    delaycompress                                            # 延迟压缩
    missingok                                                # 日志文件不存在时不报错
    notifempty                                               # 空文件不轮转
    create 0640 {{ backup_user | default('root') }} {{ backup_group | default('root') }}  # 创建新文件权限和所有者
}

# 验证操作日志 - 记录备份文件完整性验证的结果
{{ backup_log_dir }}/verify.log {
    daily                                                    # 每日轮转
    rotate {{ backup_log_retention_days | default(30) }}    # 保留30天的日志文件
    compress                                                 # 压缩旧日志文件
    delaycompress                                            # 延迟压缩
    missingok                                                # 日志文件不存在时不报错
    notifempty                                               # 空文件不轮转
    create 0640 {{ backup_user | default('root') }} {{ backup_group | default('root') }}  # 创建新文件权限和所有者
}

# 清理操作日志 - 记录过期备份文件清理操作的详细信息
{{ backup_log_dir }}/cleanup.log {
    weekly                                                   # 每周轮转
    rotate {{ backup_log_retention_weeks | default(12) }}   # 保留12周的日志文件
    compress                                                 # 压缩旧日志文件
    delaycompress                                            # 延迟压缩
    missingok                                                # 日志文件不存在时不报错
    notifempty                                               # 空文件不轮转
    create 0640 {{ backup_user | default('root') }} {{ backup_group | default('root') }}  # 创建新文件权限和所有者
}

# 远程同步日志 - 记录备份文件远程传输和同步操作
{{ backup_log_dir }}/remote_sync.log {
    daily                                                    # 每日轮转
    rotate {{ backup_log_retention_days | default(30) }}    # 保留30天的日志文件
    compress                                                 # 压缩旧日志文件
    delaycompress                                            # 延迟压缩
    missingok                                                # 日志文件不存在时不报错
    notifempty                                               # 空文件不轮转
    create 0640 {{ backup_user | default('root') }} {{ backup_group | default('root') }}  # 创建新文件权限和所有者
}

# 错误日志 - 记录备份系统运行过程中的错误和异常信息
{{ backup_log_dir }}/error.log {
    daily                                                    # 每日轮转
    rotate {{ backup_log_retention_days | default(30) }}    # 保留30天的日志文件
    compress                                                 # 压缩旧日志文件
    delaycompress                                            # 延迟压缩
    missingok                                                # 日志文件不存在时不报错
    notifempty                                               # 空文件不轮转
    create 0640 {{ backup_user | default('root') }} {{ backup_group | default('root') }}  # 创建新文件权限和所有者
    postrotate
        # 轮转后检查是否有错误日志，如有则发送告警邮件
        if [ -s {{ backup_log_dir }}/error.log.1 ]; then
{% if backup_email_enabled | default(false) %}
            echo "备份系统在 $(hostname) 上检测到错误。请检查 {{ backup_log_dir }}/error.log.1" | \
            mail -s "[备份错误] $(hostname) 上检测到备份错误" {{ backup_email_to }}
{% endif %}
        fi
    endscript
}